package com.elitedatai.mchtest.wayline.model.param;

import com.dji.sdk.cloudapi.wayline.OutOfControlActionEnum;
import com.dji.sdk.cloudapi.wayline.TaskTypeEnum;
import com.dji.sdk.cloudapi.wayline.WaylineTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.util.List;


/**
 * 创建航线路线任务参数类
 * 该类用于封装创建航线路线任务时所需的各种参数信息
 */
@Data
public class CreateJobParam {

    //飞行任务id
    private String missionId;

    // 计划ID
    private String planId;

    /**
     * 任务名称
     * 用于标识和区分不同的航线路线任务
     */
    @NotBlank
    @Schema(description = "计划名称")
    private String name;

    /**
     * 文件ID
     * 关联的航线路线文件的唯一标识符
     */
    @NotBlank
    @Schema(description = "航线文件ID")
    private String fileId;

    /**
     * 机库序列号
     * 指定执行该任务的机库设备的唯一序列号
     */
    @NotBlank
    @Schema(description = "机库序列号")
    private String dockSn;

    /**
     * 航线路线类型枚举
     * 定义航线路线的类型，如点对点航线、航拍航线等
     */
    @NotNull
    @Schema(description = "航线路线类型")
    private WaylineTypeEnum waylineType;

    /**
     * 任务类型枚举
     * 定义任务的类型，如航拍任务、巡检任务等
     */
    @NotNull
    @Schema(description = "执行类型")
    private TaskTypeEnum taskType;

    /**
     * 返航高度（单位：米）
     * 当无人机执行返航操作时的飞行高度，取值范围20-500米
     */
    @Range(min = 20, max = 500)
    @NotNull
    @Schema(description = "返航高度")
    private Integer rthAltitude;

    /**
     * 失控行为枚举
     * 定义当无人机与遥控器失去连接时的应对行为，如悬停、返航等
     */
    @NotNull
    @Schema(description = "失控行为")
    private OutOfControlActionEnum outOfControlAction;

    /**
     * 最低电池容量百分比
     * 执行任务时无人机电池电量的最低阈值，低于此值将不会执行任务，取值范围50-90
     */
    @Range(min = 50, max = 90)
    @Schema(description = "最低电池容量")
    private Integer minBatteryCapacity;

    /**
     * 最低存储容量（单位：MB）
     * 执行任务时无人机存储空间的最低要求，低于此值将不会执行任务
     */
     @Schema(description = "最低存储容量")
    private Integer minStorageCapacity;

    /**
     * 任务执行日期列表
     * 定义任务在一周中的哪些日期执行
     */
    @Schema(description = "任务执行日期列表")
    private List<Long> taskDays;

    /**
     * 任务执行时间段列表
     * 定义任务在每天的执行时间段，每个时间段包含开始时间和结束时间的时间戳
     * 总大小等于taskDays的大小，每个子列表表示对应日期的执行时间段，每个子列表包含开始时间和结束时间的时间戳(list.get(0)表示开始时间，list.get(1)表示结束时间)
     */
    @Schema(description = "任务执行时间段列表")
    private List<List<Long>> taskPeriods;
}